Sequence のガスレス・サーバーレス トランザクション API を使ってコレクティブルをミントする方法を解説します。Cloudflare Worker 上で API を実装することで、ユーザーはガス代なしでシームレスに操作できます。
mkdir
でディレクトリを作成し、cd
でそのディレクトリに移動し、pnpm init
でpackage.json
を作成します。
次に、プロジェクトに wrangler cli がインストールされていることを確認し、wrangler
キーワードをローカル bash セッションのエイリアスとして設定します。
"Hello World" Worker
アプリケーションを初期化するプロンプトに従ってください。
wrangler init
後にエンターを4回押し、最後の2つの質問にはNo
と答えてgitバージョン管理とデプロイをスキップしてください。
これにより、クラウドにコードをデプロイできるスターターリポジトリがクローンされます。
wrangler dev
コマンドを使ってローカルテストを実行できます。cd
で移動し、wrangler deploy
コマンドを実行します。
これによりURLが表示されるので、ブラウザでhttps://<app>.<account>.workers.dev
にアクセスし、「Hello World!」の結果を確認できます。
Developer
にアップグレードする必要があります。こちらの手順 をご参照ください。minter permission
を Sequence Wallet Transactions API Address
に付与してください。
利用する transactions API アドレスを知るには、まず以下のいずれかの方法で取得します。
generate local wallet
ボタンでウォレットキーを生成することで取得できます(デモ目的でのみご利用ください)。推奨
: 以下のコードスニペットを使い、EOA ウォレットの秘密鍵から生成されたアカウントアドレスをローカルで出力することもできます。Contracts
ページに移動し、Linked contracts
を選択、Write Contract
タブで grantRole
メソッドを展開します。
以下の情報で入力してください。
bytes32 role
: 0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6
address account
: <Generated Sequence Transactions API Wallet Address>
role
文字列は、solidity では keccak256("MINTER_ROLE")
、javascript では ethers.keccak256(ethers.toUtf8Bytes("MINTER_ROLE"))
の結果です。
これにより、特定のアドレスのみがコントラクトからミントできるようになり、それ以外はエラーとなります。
write
をクリックし、スポンサー付きトランザクションに署名してロールの更新を完了してください。
ethers
と 0xsequence
をインストールして Sequence API にアクセスし、リクエストが信頼できる Sequence ウォレットから来ているかどうかの証明を検証します。
proofString
と address
、および環境変数が有効かどうかを検証します。
src/index.ts
に配置するコードの雛形はこのようになります。callContract
と getBlockNumber
はモック化されており、コントラクト呼び出し前に verify
を呼ぶ検証ステップが含まれています。
wrangler.toml
の [vars]
セクションを更新してビルド用の環境変数を渡します。
window
オブジェクトが見つからないというエラーが発生します。
これを防ぐには、wrangler.toml
ファイルに以下の行を追加し、環境を対応させてください。
wrangler deploy
を使用して再デプロイできます。
次に、以下のように curl リクエストでエンドポイントをテストします。
connect
ボタンを押し、その後 copy to clipboard
をクリックしてください。
ETHAuthProof
を他人と共有しないことをおすすめします。これを共有すると、他人があなたのウォレットの所有者であることを証明し、特定のAPIとやり取りできてしまいます。
最後に、この手順で取得したアプリの url
、ビューワーdappからコピーした値を <some_proof>
、あなたのウォレットアドレスを <some_address>
にそれぞれ置き換えてください。これで、モックされた 0x
文字列が返されます。
callContract
と getBlockNumber
メソッドを次のように実装します: